java我需要测试类中的测试方法吗
所以我有一个示例方法,我给他一天,它会返回我一周中的第一天和最后一天,其中一天:
public static final DatePeriod thisWeek(LocalDate date) {
TemporalField dayOfWeek = WeekFields.of(Locale.FRANCE).dayOfWeek();
LocalDate mon = date.with(dayOfWeek, 1);
LocalDate sun = date.with(dayOfWeek, 7);
return new DatePeriod(mon, sun);
}
我必须编写JUnit测试(我做到了):
@Test
public void testThisMonth_LocalDate() throws ParseException {
System.out.println("thisMonth");
for (String[] date : VALID_TEST_DATES) {
LocalDate dateLocal = dateToLocal(date[0]);
DatePeriod expResult = new DatePeriod(dateToLocal(date[5]), dateToLocal(date[6]));
DatePeriod result = JavaTimeUtils.thisMonth(dateLocal);
assertEquals(expResult.getLeft(), result.getLeft());
assertEquals(expResult.getRight(), result.getRight());
}
}
所以,因为我多次使用了dateToLocal()中的代码,所以我决定使用如下方法:
public LocalDate dateToLocal(String dateString) throws ParseException { // Calendar to LocalDate
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
Calendar cal = Calendar.getInstance();
Date initDate = df.parse(dateString);
cal.setTime(initDate);
LocalDate dateLocal = LocalDate.of(cal.get(Calendar.YEAR), Month.of(cal.get(Calendar.MONTH)+1), cal.get(Calendar.DAY_OF_MONTH));
return dateLocal;
}
而且很有效。 但这不是我的问题。 我想知道这是做类似事情的正确方法吗(这个JUnit测试中的方法),我是否需要对这个方法进行测试,我是否需要将它转移到其他类中(测试之外)?我知道这是个奇怪的问题,我已经在谷歌上搜索过了,但没有成功。(也许我不能直接问谷歌。)。 谢谢:)
# 1 楼答案
你不需要测试测试方法(正如其他人所指出的)。但是,我建议将预期结果存储为LocalDate实例,而不是通过字符串动态创建它们。这样,您就不会受到转换代码中可能存在的错误的影响
# 2 楼答案
做某事没有绝对的方法,一切都取决于项目
这个话题对每个人的主观性都是开放的
在我看来,如果在一个测试类中多次使用一个代码块,那么应该在本地方法中提取该代码块
如果在多个测试方法中使用它,那么应该研究继承或在测试包下创建一个小的util类
如果主java代码中也需要该方法,那么就应该为其编写单元测试。测试的目的是验证运行时代码。JUnit代码在运行前运行
# 3 楼答案
我想说,测试代码和生产代码的规则类似:
基本上:让代码尽可能地可见,但不要更多
是的,如果您将代码提取到一个实用程序类(第二个项目符号或以下),那么我希望为代码提供一个专用的测试/测试套件
# 4 楼答案
不,写“测试对测试”不是个好主意。我在很多公司工作,但我们都没有这样做。你写的东西已经够多了
# 5 楼答案
在测试类中使用helper方法是完全可以接受的。事实上,当测试任何大型复杂的事物时,很难不这样做。除非测试助手方法在多个项目中的多个测试中使用的实用工具类中(因此在不同项目的主jar中),所以通常不认为编写测试助手方法的测试是有用的。(否则,从逻辑上讲,几乎不可能有任何代码重用和经过充分测试的类)